#include <memory>
#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;
class AutoPtrTest
{
public:
    AutoPtrTest(string s)
    {
        str = s;
        cout << "Test create\n";
    }
    ~AutoPtrTest()
    {
        cout << "Test delete: " << str << endl;
    }

    string &get_str()
    {
        return str;
    }
    void set_str(string s)
    {
        str = s;
    }
    void print()
    {
        cout << str << endl;
    }

private:
    string str;
};

int main()
{

    printf("\n使用智能指针    start\n\n");
    auto_ptr<AutoPtrTest> ptest(new AutoPtrTest("123")); //调用构造函数定义
    //ptest.release();

    ptest->set_str("hello"); //调用set_str
    ptest->print();          //输出hello
    ptest.get()->print();

    ptest->get_str() += " world!"; //hello world
    (*ptest).print();

    ptest.reset(new AutoPtrTest("123")); //先释放hello world,再创建123
    // ptest.reset();
    ptest->print();

    auto_ptr<AutoPtrTest> ptest2(new AutoPtrTest("456"));
    ptest2 = ptest;
    ptest2->print();
    if (ptest.get() == NULL) //判断智能指针是否为空
    {
        cout << "ptest=NULL" << endl;
    }

    printf("\n使用智能指针    end--------\n\n");
}